// =============================================================================
// | 包: conf                                                                 |
// | 模块: 数据库配置                                                         |
// | 功能: 定义数据库连接相关的配置结构体和方法                                |
// =============================================================================
package conf

import "fmt" // 格式化包 - 用于字符串格式化和输出

// =============================================================================
// | 结构体: DB                                                               |
// | 功能: 数据库配置结构体                                                   |
// | 用途: 存储数据库连接所需的全部配置信息，支持读写分离配置                  |
// =============================================================================
type DB struct {
	// =============================================================================
	// | 字段: User - string                                                      |
	// | 功能: 数据库用户名                                                       |
	// | 用途: 连接数据库的用户名                                                 |
	// | 映射: YAML配置中的user字段                                               |
	// =============================================================================
	User string `yaml:"user"` // 数据库用户名 - 连接数据库的认证用户名
	
	// =============================================================================
	// | 字段: Password - string                                                  |
	// | 功能: 数据库密码                                                         |
	// | 用途: 连接数据库的密码                                                   |
	// | 映射: YAML配置中的password字段                                           |
	// =============================================================================
	Password string `yaml:"password"` // 数据库密码 - 连接数据库的认证密码
	
	// =============================================================================
	// | 字段: Host - string                                                      |
	// | 功能: 数据库主机地址                                                     |
	// | 用途: 数据库服务器的IP地址或域名                                         |
	// | 映射: YAML配置中的host字段                                               |
	// =============================================================================
	Host string `yaml:"host"` // 数据库主机地址 - 数据库服务器的网络地址
	
	// =============================================================================
	// | 字段: Port - int                                                         |
	// | 功能: 数据库端口号                                                       |
	// | 用途: 数据库服务监听的端口号                                             |
	// | 映射: YAML配置中的port字段                                               |
	// =============================================================================
	Port int `yaml:"port"` // 数据库端口号 - 数据库服务的TCP端口
	
	// =============================================================================
	// | 字段: DB - string                                                        |
	// | 功能: 数据库名称                                                         |
	// | 用途: 指定要连接的具体数据库                                             |
	// | 映射: YAML配置中的db字段                                                 |
	// =============================================================================
	DB string `yaml:"db"` // 数据库名称 - 要连接的具体数据库名称
	
	// =============================================================================
	// | 字段: Debug - bool                                                       |
	// | 功能: 调试模式                                                           |
	// | 用途: 控制是否打印全部SQL日志，用于开发调试                              |
	// | 映射: YAML配置中的debug字段                                              |
	// =============================================================================
	Debug bool `yaml:"debug"` // 调试模式 - 是否开启SQL日志打印
	
	// =============================================================================
	// | 字段: Source - string                                                    |
	// | 功能: 数据库类型                                                         |
	// | 用途: 指定数据库类型，如mysql/pgsql等                                    |
	// | 映射: YAML配置中的source字段                                             |
	// =============================================================================
	Source string `yaml:"source"` // 数据库类型 - 如mysql/pgsql等
}

// =============================================================================
// | 方法: DSN                                                                |
// | 参数: 无                                                                  |
// | 返回: string - 格式化的数据库连接字符串                                   |
// | 功能: 根据配置生成符合MySQL连接格式的DSN字符串                            |
// | 说明: 生成的DSN字符串包含用户名、密码、主机、端口、数据库名和连接参数     |
// | 格式: user:password@tcp(host:port)/dbname?charset=utf8mb4&parseTime=True&loc=Local |
// =============================================================================
func (d DB) DSN() string {
	return fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		d.User, d.Password, d.Host, d.Port, d.DB) // 生成MySQL连接字符串
}

// =============================================================================
// | 方法: Empty                                                              |
// | 参数: 无                                                                  |
// | 返回: bool - 配置是否为空的布尔值                                        |
// | 功能: 检查数据库配置是否为空                                              |
// | 说明: 判断数据库核心配置（用户、密码、主机、端口）是否全部为空            |
// | 用途: 用于判断是否需要配置读写分离                                        |
// =============================================================================
func (d DB) Empty() bool {
	return d.User == "" && d.Password == "" && d.Host == "" && d.Port == 0 // 检查核心数据库配置是否为空
}
